package com.dm.cloud.file.service;

import com.dm.cloud.file.common.model.file.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

public interface FIleManagerService {
    /**
     * 查询文件列表
     * @param parent 父级目录
     * @param filterName 要筛选的文件名
     * @param fileType
     * @return
     */
    List<FileModel> files(String parent, String filterName, FileModel.FileType fileType);

    /**
     * 分片上传文件第一步：获取上传文件标识
     * @param fileUploadShardStartMode
     * @return
     */
    FileUploadBurstStartResultMode shardStart(FileUploadBurstStartMode fileUploadShardStartMode);


    /**
     * 上传分片文件第二步：上传分片。 fileKey:第一个步骤返回的key, shardNum:当前分片编号
     * @param file
     * @param fileKey
     * @param shardNum
     * @return
     */
    Boolean shardUpload(MultipartFile file, String fileKey, Integer shardNum);

    /**
     * 上传分片文件第三步：合并分片。并上传镜像，返回相对路径
     * @param fileUploadMerge
     * @param saveType 存储类型，0保存到下载中心文件   1保存到插件存储目录
     * @return
     */
    FileModel shardMerge(FileUploadMerge fileUploadMerge,int saveType);

    /**
     * 删除文件
     * @param deleteFileModel
     * @return
     */
    Boolean deleteFile(DeleteFileModel deleteFileModel);

    void downloadFile(String filePath, HttpServletResponse response);

    /**
     * 创建空文件夹
     * @param path
     * @return
     */
    FileModel mkdirs(String path);

    /**
     * 修改文件名
     * @param updateFileNameModel
     * @return
     */
    Boolean updateName(UpdateFileNameModel updateFileNameModel);

    /**
     * 下载多个文件
     * @param filePaths
     * @param response
     */
    void downloadFiles(List<String> filePaths, HttpServletResponse response);
}
